package listbyorder.access101_200.test166;

import java.util.HashMap;

/**
 * @author code_yc
 * @version 1.0
 * @date 2020/6/14 10:15
 */
public class Solution1 {

    // 分数到小数
    public String fractionToDecimal(int numerator, int denominator) {
        if (numerator == 0) return "0";
        long num = numerator;
        long den = denominator;
        String sign = "";
        if (num > 0 && den < 0 || num < 0 && den > 0) {
            sign = "-";
        }
        num = Math.abs(num);
        den = Math.abs(den);
        // 计算整数部分
        long integer = num / den;
        // 计算于数
        num = num - den * integer;
        // 创建一个hashmap记录当前的num除上除数是否出现过
        HashMap<Long, Integer> map = new HashMap<>();
        int index = 0;
        String decimal = "";   // 记录小数部分
        int repeatIndex = -1;  // 创建一个指针保存重复的位置
        while (num != 0) {
            num *= 10;   // 首先num方法
            if (map.containsKey(num)) {
                repeatIndex = map.get(num);
                break;
            }
            // 保存被除数
            map.put(num, index);
            // 保存当前的商
            long decimalPlace = num / den;
            decimal = decimal + decimalPlace;
            num = num - decimalPlace * den;
            index++;
        }
        if (repeatIndex != -1) {
            // 表示此时有循环小数产生
            String dec = decimal;
            return sign + integer + "." + dec.substring(0, repeatIndex) + "(" + dec.substring(repeatIndex) + ")";
        } else {
            if (decimal.equals("")) {
                return sign + integer;
            } else {
                return sign + integer + "." + decimal;
            }
        }
    }
}
